package xiaohong.jvm;

import xiaohong.bean.User;

import java.util.ArrayList;
import java.util.List;

public class ValuePassDemoo {

    public static void main(String[] args) {
        User user = new User(1L , "xiaohong" , "123456");
//
//        int num = 10 ;
//        testBaseData(num);
//        System.out.println(num);
//
//        String name = "xiaohong";
//        System.out.println(testString(name));
//        System.out.println(name);
//
//        Integer age = 20 ;
//        testInteger(age);
//        System.out.println(age);
//
//        Long age2 = 20L;
//        testLong(age2);
//        System.out.println(age2);
//
//        ArrayList<Object> list = new ArrayList<>();
//        list.add("xiaohong");
//        testList(list);
//        System.out.println(list);
        System.out.println("进入方法之前" + user);
        testUser(user);
        System.out.println("进入方法之前" + user);
    }

    /**
     * 基本数据类型（如 int、char、float 等）
     * <p>
     * 当你将基本数据类型的变量传递给方法时，Java 会将该变量的值复制一份传递给方法。这意味着在方法内部对该参数的任何修改都不会影响原始变量。
     * @param value 测试数
     */
    public static void testBaseData(int value) {
        value = 100 ;
    }

    /**
     * string 类型在java中也不会被传递到下一个方法 ， 可以使用return 返回
     * @param value
     */
    public static String testString(String value){
        value = "Hello World";
        return value;
    }

    public static void testInteger(Integer value){
        value = 100 ;
    }

    public static void testLong(Long value){
        value = 120L ;
    }

    public static void testArray(int [] value){
        value[0] = 100;
    }

    public static void testList(List<Object> value){
        value.set(0, "Hello World");
    }

    public static void testUser(User user){
        user.setId(100L);
        user.setName("zuihou");
    }



}
